load("@pico-sdk//bazel:defs.bzl", "incompatible_with_config")

package(default_visibility = ["//visibility:public"])

# This exists to break a dependency cycle between
# this library and //src/common/pico_sync.
# Application code should always use :pico_time instead.
cc_library(
    name = "pico_time_headers",
    hdrs = [
        "include/pico/time.h",
        "include/pico/timeout_helper.h",
    ],
    includes = ["include"],
    # invalid_params_if() uses Statement Expressions, which aren't supported in MSVC.
    target_compatible_with = incompatible_with_config("@rules_cc//cc/compiler:msvc-cl"),
    visibility = [
        "//src/common/pico_sync:__pkg__",
        "//src/host/pico_time_adapter:__pkg__",
        "//src/rp2_common/tinyusb:__pkg__",
    ],
    deps = select({
        "//bazel/constraint:host": [
            "//src/host/hardware_timer:hardware_timer_headers",
        ],
        "//conditions:default": [
            "//src/rp2_common/hardware_timer:hardware_timer_headers",
        ],
    }),
)

cc_library(
    name = "pico_time",
    srcs = [
        "time.c",
        "timeout_helper.c",
    ],
    hdrs = [
        "include/pico/time.h",
        "include/pico/timeout_helper.h",
    ],
    # macOS defines __weak as part of Xcode, and the semantics are unfortunately
    # different.
    copts = select({
        "@platforms//os:macos": ["-Wno-ignored-attributes"],
        "//conditions:default": [],
    }),
    includes = ["include"],
    deps = [
        "//src/common/pico_base_headers",
        "//src/common/pico_sync",
        "//src/common/pico_util",
    ] + select({
        "//bazel/constraint:host": [
            "//src/host/hardware_gpio",
            "//src/host/hardware_timer",
            "//src/host/pico_runtime",
            "//src/host/pico_time_adapter",
        ],
        "//conditions:default": [
            "//src/rp2_common/hardware_gpio",
            "//src/rp2_common/hardware_timer",
            "//src/rp2_common/pico_runtime_init",
            "//src/rp2_common/pico_time_adapter",
        ],
    }),
)
